package com.train.course.mapper;

import com.train.course.domain.VideoComment;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 视频评论Mapper接口
 * 
 * @author ruoyi
 */
public interface VideoCommentMapper 
{
    /**
     * 查询视频评论
     * 
     * @param commentId 视频评论主键
     * @return 视频评论
     */
    public VideoComment selectVideoCommentById(Long commentId);

    /**
     * 查询视频评论列表
     * 
     * @param videoComment 视频评论
     * @return 视频评论集合
     */
    public List<VideoComment> selectVideoCommentList(VideoComment videoComment);

    /**
     * 根据视频ID和类型查询评论列表
     * 
     * @param videoId 视频ID
     * @param videoType 视频类型
     * @return 视频评论集合
     */
    public List<VideoComment> selectVideoCommentListByVideoId(Long videoId, String videoType);

    /**
     * 根据父评论ID查询子评论列表
     * 
     * @param parentId 父评论ID
     * @return 视频评论集合
     */
    public List<VideoComment> selectVideoCommentListByParentId(Long parentId);

    /**
     * 统计视频评论数
     * 
     * @param videoId 视频ID
     * @param videoType 视频类型
     * @return 评论数
     */
    public int countVideoCommentByVideoId(Long videoId, String videoType);

    /**
     * 新增视频评论
     * 
     * @param videoComment 视频评论
     * @return 结果
     */
    public int insertVideoComment(VideoComment videoComment);

    /**
     * 修改视频评论
     * 
     * @param videoComment 视频评论
     * @return 结果
     */
    public int updateVideoComment(VideoComment videoComment);

    /**
     * 删除视频评论
     * 
     * @param commentId 视频评论主键
     * @return 结果
     */
    public int deleteVideoCommentById(Long commentId);

    /**
     * 批量删除视频评论
     * 
     * @param commentIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteVideoCommentByIds(Long[] commentIds);

    /**
     * 增加评论点赞数
     * @param commentId 评论ID
     * @return 结果
     */
    public int incrementLikeCount(Long commentId);

    /**
     * 减少评论点赞数
     * @param commentId 评论ID
     * @return 结果
     */
    public int decrementLikeCount(Long commentId);

    /**
     * 关联用户表查询主评论列表（下滑刷新）
     * 
     * @param videoId 视频ID
     * @param lastCommentId 上一次最后一条主评论ID
     * @param pageSize 页面大小
     * @return 主评论列表
     */
    public List<com.train.course.vo.CommentVO> selectMainCommentsWithUser( Long videoId, Long lastCommentId, Integer pageSize);

    /**
     * 关联用户表查询子评论列表（下滑刷新）
     * 
     * @param parentId 父评论ID
     * @param lastReplyId 上一次最后一条子评论ID
     * @param pageSize 页面大小
     * @return 子评论列表
     */
    public List<com.train.course.vo.CommentVO> selectRepliesWithUser(Long parentId, Long lastReplyId, Integer pageSize);

    /**
     * 查询某主评论的前N条子评论（关联用户表）
     * 
     * @param parentId 父评论ID
     * @param limit 限制条数
     * @return 子评论列表
     */
    public List<com.train.course.vo.CommentVO> selectTopRepliesWithUser(Long parentId, Integer limit);
}